#include "RWLock.h"

RWLock :: RWLock() {
	leyendo = 0;
	escribiendo = false;
	quieroEscribir = false;
	id = 0;
}

void RWLock :: rlock() {
	
    id++;
    int mi_id = id;
    //printf("r _ id: %d\n", id);
    cola.push(id);
	//printf("leyendo: %d \n", leyendo);
    while(escribiendo ||  mi_id != cola.front());

    leyendo++;
	cola.pop();

}

void RWLock :: wlock() {

    id++;
    int mi_id = id;
    cola.push(id);
	//printf("w _ id: %d\n", id);
    while(escribiendo || mi_id != cola.front() || leyendo != 0);

    escribiendo = true;
    cola.pop();

}

void RWLock :: runlock() {
	leyendo --;
}

void RWLock :: wunlock() {
	escribiendo = false;
}
